package com.chen.recruit.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chen.recruit.common.api.CommonResult;
import com.chen.recruit.common.enums.UserType;
import com.chen.recruit.domain.Admin;
import com.chen.recruit.domain.Enterprise;
import com.chen.recruit.domain.Student;
import com.chen.recruit.domain.User;
import com.chen.recruit.domain.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 用户Service接口
 *
 * @author cgy
 * @date 2022-08-20
 */
public interface UserService extends IService<User> {

    /**
     * 新增或更新用户功能
     *
     * @param user 用户
     * @param type 类型
     * @return {@link CommonResult}
     */
    CommonResult addOrUpdateUser(User user, UserType type);

    /**
     * 批量删除用户功能
     *
     * @param userIds 用户id
     * @return {@link CommonResult}
     */
    CommonResult deleteUserByIds(Integer[] userIds);

    /**
     * 获取指定用户信息功能
     *
     * @param id   用户id
     * @param type 用户类型
     * @return {@link Object}
     */
    Object getUserInfoById(Integer id, UserType type);

    /**
     * 获取管理员列表功能
     *
     * @param admin 管理员
     * @param page  分页
     * @return {@link Page}<{@link Admin}>
     */
    Page<Admin> getAdminList(Admin admin, Page<Admin> page);

    /**
     * 获取企业列表功能
     *
     * @param enterprise 企业
     * @param page       分页
     * @return {@link Page}<{@link Enterprise}>
     */
    Page<Enterprise> getEnterpriseList(Enterprise enterprise, Page<Enterprise> page);

    /**
     * 获取学生列表功能
     *
     * @param student 学生
     * @param page    分页
     * @return {@link Page}<{@link Student}>
     */
    Page<Student> getStudentList(Student student, Page<Student> page);

    /**
     * 导入用户列表
     *
     * @param file 上传文件
     * @param type 用户类型
     * @return {@link CommonResult}
     */
    CommonResult importUserList(MultipartFile file, UserType type);

    /**
     * 导出管理员列表功能
     *
     * @param admin 管理员
     * @return {@link List}<{@link Admin}>
     */
    List<Admin> exportAdminList(Admin admin);

    /**
     * 导出企业列表功能
     *
     * @param enterprise 企业
     * @return {@link List}<{@link Enterprise}>
     */
    List<Enterprise> exportEnterpriseList(Enterprise enterprise);

    /**
     * 导出学生列表功能
     *
     * @param student 学生
     * @return {@link List}<{@link Student}>
     */
    List<Student> exportStudentList(Student student);

    /**
     * 用户登录功能
     *
     * @param vo 登陆视图对象
     * @return {@link CommonResult}
     */
    CommonResult userLogin(LoginVo vo);

    /**
     * 重置密码功能
     *
     * @param vo 重置密码视图对象
     * @return {@link CommonResult}
     */
    CommonResult resetPwd(ResetPwdVo vo);

    /**
     * 更新密码功能
     *
     * @param vo 更新密码视图对象
     * @return {@link CommonResult}
     */
    CommonResult updatePwd(UpdatePwdVo vo);

    /**
     * 更新用户头像
     *
     * @param file 图片
     * @return {@link CommonResult}
     */
    CommonResult updateUserAvatar(MultipartFile file);

}
